﻿using System;
using System.ComponentModel;
using System.Windows.Forms;
using GSQ.BusinessEntities;
using GSQ.BusinessLogic;

namespace UIapp.Dialogos
{
    public partial class frmCatalogos : Plantillas.frmDialogPlantilla
    {
        public frmCatalogos(Comun.Catalogos pCatalogo, EntityBase pEntity)
        {
            InitializeComponent();
            this.currentEntity = pEntity;
            this.catalogo = pCatalogo;
            #region Iniciar form

            if (this.currentEntity != null)
            {

                this.lblId.DataBindings.Add(new Binding("Text", this.currentEntity, "ID", true, DataSourceUpdateMode.OnValidation, null, "00000"));
                this.Text = string.Format("Modificación de {0}", this.catalogo);
                switch (this.catalogo)
                {
                    case Comun.Catalogos.Bancos:
                        #region
                        this.txtDescrpcion.Text = ((BANCOS)this.currentEntity).BANCO;
                        this.chkActivo.Checked = ((BANCOS)this.currentEntity).ACTIVO;
                        break;
                        #endregion

                    case Comun.Catalogos.Categorias:
                        #region
                        this.txtDescrpcion.Text = ((CATEGORIAS)this.currentEntity).CATEGORIA;
                        this.chkActivo.Checked = ((CATEGORIAS)this.currentEntity).ACTIVO;
                        break;
                        #endregion

                    case Comun.Catalogos.Ciudades:
                        #region
                        this.txtDescrpcion.Text = ((CIUDADES)this.currentEntity).CIUDAD;
                        this.chkActivo.Checked = ((CIUDADES)this.currentEntity).ACTIVO;
                        break;
                        #endregion

                    case Comun.Catalogos.Marcas:
                        #region
                        this.txtDescrpcion.Text = ((MARCAS)this.currentEntity).MARCA;
                        this.chkActivo.Checked = ((MARCAS)this.currentEntity).ACTIVO;
                        break;
                        #endregion

                    case Comun.Catalogos.Medidas:
                        #region
                        this.txtDescrpcion.Text = ((MEDIDAS)this.currentEntity).MEDIDA;
                        this.chkActivo.Checked = ((MEDIDAS)this.currentEntity).ACTIVO;
                        break;
                        #endregion

                    case Comun.Catalogos.Monedas:
                        #region
                        this.txtDescrpcion.Text = ((MONEDAS)this.currentEntity).MONEDA;
                        this.chkActivo.Checked = ((MONEDAS)this.currentEntity).ACTIVO;
                        break;
                        #endregion

                    case Comun.Catalogos.Descripciones:
                        #region
                        this.txtDescrpcion.Text = ((DESCRIPCIONES)this.currentEntity).DESCRIPCION;
                        this.chkActivo.Checked = ((DESCRIPCIONES)this.currentEntity).ACTIVO;
                        break;
                        #endregion

                    case Comun.Catalogos.Departamentos:
                        #region
                        this.txtDescrpcion.Text = ((DEPARTAMENTOS)this.currentEntity).DEPARTAMENTO;
                        this.chkActivo.Checked = ((DEPARTAMENTOS)this.currentEntity).ACTIVO;
                        break;
                        #endregion

                    case Comun.Catalogos.Modelos:
                        #region
                        this.txtDescrpcion.Text = ((MODELOS)this.currentEntity).MODELO;
                        this.chkActivo.Checked = ((MODELOS)this.currentEntity).ACTIVO;
                        break;
                        #endregion

                    case Comun.Catalogos.Versiones:
                        #region
                        this.txtDescrpcion.Text = ((VERSIONES)this.currentEntity).VERSION;
                        this.chkActivo.Checked = ((VERSIONES)this.currentEntity).ACTIVO;
                        break;
                        #endregion
                    default:
                        throw new Exception("No se ha implementado metodo para este catalogo");
                }
            }
            else
            {
                this.Text = string.Format("Alta de {0}", this.catalogo);
            }

            #endregion
        }

        #region Variables
        public EntityBase currentEntity;
        Comun.Catalogos catalogo;
        bool entityError = false;
        #endregion

        #region Metodos Axiliares
        private void Guardar()
        {
            #region switch

            switch (this.catalogo)
            {
                case Comun.Catalogos.Bancos:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new BANCOS { BANCO = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new BancosBL().Insert((BANCOS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }
                    }
                    else
                    {
                        BANCOS entity = (BANCOS)this.currentEntity;
                        entity.BANCO = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new BancosBL().Update(entity, (BANCOS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion

                case Comun.Catalogos.Categorias:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new CATEGORIAS { CATEGORIA = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new CategoriasBL().Insert((CATEGORIAS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }

                    }
                    else
                    {
                        CATEGORIAS entity = (CATEGORIAS)this.currentEntity;
                        entity.CATEGORIA = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new CategoriasBL().Update(entity, (CATEGORIAS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion

                case Comun.Catalogos.Ciudades:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new CIUDADES { CIUDAD = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new CiudadesBL().Insert((CIUDADES)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }
                    }
                    else
                    {
                        CIUDADES entity = (CIUDADES)this.currentEntity;
                        entity.CIUDAD = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new CiudadesBL().Update(entity, (CIUDADES)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion

                case Comun.Catalogos.Marcas:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new MARCAS { MARCA = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new MarcasBL().Insert((MARCAS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }
                    }
                    else
                    {
                        MARCAS entity = (MARCAS)this.currentEntity;
                        entity.MARCA = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new MarcasBL().Update(entity, (MARCAS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion

                case Comun.Catalogos.Medidas:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new MEDIDAS { MEDIDA = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new MedidasBL().Insert((MEDIDAS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }
                    }
                    else
                    {
                        MEDIDAS entity = (MEDIDAS)this.currentEntity;
                        entity.MEDIDA = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new MedidasBL().Update(entity, (MEDIDAS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion

                case Comun.Catalogos.Monedas:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new MONEDAS { MONEDA = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new MonedasBL().Insert((MONEDAS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }
                    }
                    else
                    {
                        MONEDAS entity = (MONEDAS)this.currentEntity;
                        entity.MONEDA = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new MonedasBL().Update(entity, (MONEDAS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion

                case Comun.Catalogos.Descripciones:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new DESCRIPCIONES { DESCRIPCION = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new DescripcionesBL().Insert((DESCRIPCIONES)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }
                    }
                    else
                    {
                        DESCRIPCIONES entity = (DESCRIPCIONES)this.currentEntity;
                        entity.DESCRIPCION = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new DescripcionesBL().Update(entity, (DESCRIPCIONES)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion

                case Comun.Catalogos.Departamentos:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new DEPARTAMENTOS { DEPARTAMENTO = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new DepartamentosBL().Insert((DEPARTAMENTOS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }
                    }
                    else
                    {
                        DEPARTAMENTOS entity = (DEPARTAMENTOS)this.currentEntity;
                        entity.DEPARTAMENTO = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new DepartamentosBL().Update(entity, (DEPARTAMENTOS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion

                case Comun.Catalogos.Modelos:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new MODELOS { MODELO = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new ModelosBL().Insert((MODELOS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }
                    }
                    else
                    {
                        MODELOS entity = (MODELOS)this.currentEntity;
                        entity.MODELO = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new ModelosBL().Update(entity, (MODELOS)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion

                case Comun.Catalogos.Versiones:
                    #region
                    if (this.currentEntity == null)
                    {
                        this.currentEntity = new VERSIONES { VERSION = this.txtDescrpcion.Text.Trim(), ACTIVO = true };
                        if (this.currentEntity.IsValid())
                        {
                            new VersionesBL().Insert((VERSIONES)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(this.currentEntity);
                            entityError = true;
                        }
                    }
                    else
                    {
                        VERSIONES entity = (VERSIONES)this.currentEntity;
                        entity.VERSION = this.txtDescrpcion.Text.Trim();
                        entity.ACTIVO = this.chkActivo.Checked;

                        if (entity.IsValid())
                        {
                            new VersionesBL().Update(entity, (VERSIONES)this.currentEntity);
                            this.entityError = false;
                        }
                        else
                        {
                            Comun.ShowMessage(entity);
                            entityError = true;
                        }
                        this.currentEntity = entity;
                    }
                    break;
                    #endregion
                default:
                    throw new Exception("No se ha implementado metodo para este catalogo");
            }
            #endregion
        }
        #endregion

        #region Tratamiento de eventos
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                this.backgroundWorker.RunWorkerAsync();
                Comun.ShowLoadingFRM();
            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            this.Guardar();
        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            Comun.CloseLoadingFRM();
            if (e.Error != null)
                Comun.ShowMessage(e.Error);
            else if (this.entityError)
                return;
            else
            {
                Comun.ShowInMainMessage("Datos guardados correctamente...");
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.Close();
            }
        }
        #endregion
    }
}
